package com.nathan.mq.integration.model;

import com.nathan.mq.integration.constant.MQSendTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 定义MQ消息格式 业务场景： [ 支付订单的订单分账消息 ]
 *
 * @Description:
 * @Author: zhujunjie
 * @Date: 2021/12/9 17:20
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class QueueMqModel extends AbstractMQ {

    /**
     * 【！重要配置项！】 定义MQ名称
     **/
    public static final String MQ_NAME = "test-queue";

    /**
     * 内置msg 消息体定义
     **/
    private String msg;


    @Override
    public String getMQName() {
        return MQ_NAME;
    }

    /**
     * 【！重要配置项！】
     **/
    @Override
    public MQSendTypeEnum getMQType() {
        return MQSendTypeEnum.QUEUE;  // QUEUE - 点对点 、 BROADCAST - 广播模式
    }

    @Override
    public String toMessage() {
        return msg;
    }

    /**
     * 【！重要配置项！】 构造MQModel , 一般用于发送MQ时
     **/
    public static QueueMqModel build(String msg) {
        return new QueueMqModel(msg);
    }

    /**
     * 解析MQ消息， 一般用于接收MQ消息时
     **/
    public static String parse(String msg) {
//        return JSON.parseObject(msg, String.class);
        return msg;
    }

    /**
     * 定义 IMQReceiver 接口： 项目实现该接口则可接收到对应的业务消息
     **/
    public interface IMQReceiver {

        void receive(String msg);

    }

}
